<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    //一.控制字符
    //通过控制字符定义正则规则。
    //1.字符类：重复字符(量词)
    //x?:匹配0个或1个x
    // console.log(/a?/.test('bcd')); //true
    // console.log(/a?/.test('abcd')); //true
    // console.log(/a?/.test('aabcd')); //true
    // console.log(/^a?$/.test('')); //true  匹配的要是空，要么一个a
    // console.log(/^a?$/.test('a')); //true
    // console.log(/^a?$/.test('aa')); //false
    // console.log(/^a?$/.test('b')); //false


    // x*:匹配0个或任意多个x
    // console.log(/a*/.test('')); //true
    // console.log(/a*/.test('a')); //true
    // console.log(/a*/.test('aa')); //true
    // console.log(/^a*$/.test('')); //true
    // console.log(/^a*$/.test('a')); //true
    // console.log(/^a*$/.test('ab')); //false
    // console.log(/^a*$/.test('aaaaaaa')); //true


    // x+:匹配至少一个x，1个或者多个。
    // console.log(/a+/.test('')); //false
    // console.log(/a+/.test('abc')); //true
    // console.log(/^a+$/.test('a')); //true
    // console.log(/^a+$/.test('ab')); //false
    // console.log(/^a+$/.test('aa')); //true
    // console.log(/^a+$/.test('aaaaaa')); //true



    // (xyz)+:匹配至少一个(xyz),整体匹配
    // console.log(/xyz+/.test('xyzxyz')); //true
    // console.log(/^xyz+$/.test('xyzxyz')); //false
    // console.log(/^xyz+$/.test('xyzz')); //true
    // console.log(/^xyz+$/.test('xyzzzz')); //true
    // console.log(/^(xyz)+$/.test('xyzzzz')); //false
    // console.log(/^(xyz)+$/.test('xyz')); //true
    // console.log(/^(xyz)+$/.test('xyzxyzxyz')); //true

    // x{m,n}匹配最少m个、最多n个x  - 数量区间
    // x{m}：匹配m个x。
    // x{m,}：匹配至少m个x。
    // x{m,n}:最少m个、最多n个x

    // console.log(/^1[3|5|6|7|8][0-9]{9}$/.test('18123456789'))

    // []:值的区间，每一个中括号表示一个字符。
    // [0-9]:数字0-9中的任意一个。
    // [a-z]:小写字母a-z中的任意一个。
    // [A-Z]:大写字母A-Z中的任意一个。
    // [A-F]:大写字母A-F中的任意一个。
    // [A-Za-z]:字母中的一个  [A-z]==[A-Za-z]参考unicode编码
    // [0-9a-zA-Z]:数字字母中的任意一个。
    // [0-9a-zA-Z_]:数字字母下划线中的任意一个
    // [0-9]+ : 一个或者多个数字。

    // [a-z0-9]匹配括号中的字符集中的任意一个字符（小写字母和数字）
    // [^a-z0-9]:匹配任意不在括号中的字符集中的字符（非小写字母和数字） 注意使用在中括号里面才表示取反。


    //2.字符类：锚字符(位置)
    //^行首匹配
    //$行尾匹配
    // var reg = /abc/;
    // var str = 'aabcc';
    // console.log(reg.test(str));//true


    //添加了行首行尾，并不是只匹配行首行尾，而是按照顺序逐个进行匹配。(等价关系)
    // var reg = /^abc$/;
    // var str = 'abc';
    // console.log(reg.test(str)); //true

    //3.(.匹配除换行符\n外的任意字符)
    // console.log(/^.*$/.test('adkjfadslf'));
    // console.log(/^.*$/.test('adkj\nfadslf')); //false

    //4.其他的重要的匹配字符。
    // \d匹配数字，相当于[0-9]
    console.log(/^1[3|5|6|7|8]\d{9}$/.test('18123456789'));
    // \D匹配非数字，相当于[^0-9]
    // \w匹配字母和数字及_  相当于[ a-zA-Z0-9_ ]
    // \W匹配非字母和数字及_

    // \s匹配空白字符、空格、制表符和换行符
    // \S匹配非空白字符

    // this|where|logo匹配this或where或logo中任意一个


    // function fnTrim(str) {
    //     return str.replace(/^\s+|\s+$/g, ''); //将行首一个或者多个空格和行尾一个或者多个空格替换成空隙。
    // }
    // console.log('(   abc de    )');
    // console.log('(' + fnTrim('   abc de    ') + ')'); //abc de
    // console.log('   abc de    '.trim()); //abc de
</script>